package com.goa.utils;

import java.util.HashMap;
import java.util.Map;

public class MapUtils {

    /**
     * 根据给定的 value 查找对应的 key。
     * 如果找不到，则返回 null。
     *
     * @param map 原始的 Map 集合
     * @param value 要查找的 value
     * @param <K> key 的类型
     * @param <V> value 的类型
     * @return 对应的 key，如果没有找到，则返回 null
     */
    public static <K, V> K getKeyByValue(Map<K, V> map, V value) {
        if (map == null || value == null) {
            return null;
        }
        
        // 遍历 Map 查找对应的 key
        for (Map.Entry<K, V> entry : map.entrySet()) {
            if (entry.getValue().equals(value)) {
                return entry.getKey();
            }
        }
        
        // 如果没有找到对应的 key，返回 null
        return null;
    }

    /**
     * 创建一个反向的 Map，key 和 value 交换位置
     * @param map 原始的 Map 集合
     * @param <K> key 的类型
     * @param <V> value 的类型
     * @return 一个新的反向 Map
     */
    public static <K, V> Map<V, K> reverseMap(Map<K, V> map) {
        Map<V, K> reversedMap = new HashMap<>();
        if (map != null) {
            for (Map.Entry<K, V> entry : map.entrySet()) {
                reversedMap.put(entry.getValue(), entry.getKey());
            }
        }
        return reversedMap;
    }

    public static void main(String[] args) {
        // 测试 getKeyByValue
        Map<String, String> map = Map.of(
            "A", "Apple",
            "B", "Banana",
            "C", "Cherry"
        );

        String valueToFind = "Banana";
        String key = MapUtils.getKeyByValue(map, valueToFind);
        System.out.println("Key for value '" + valueToFind + "': " + key);

        // 测试 reverseMap
        Map<String, String> reversedMap = MapUtils.reverseMap(map);
        System.out.println("Reversed Map: " + reversedMap);

        // 在反向 Map 查找
        String reversedKey = MapUtils.getKeyByValue(reversedMap, "Banana");
        System.out.println("Key for value 'Banana' in reversed map: " + reversedKey);
    }
}
